﻿Public Class MerkezEkran
    Dim merkezID As Integer
    Dim kapatilincaLogin As Boolean

    Private Sub MerkezEkran_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        indirilecekKargolariGuncelle()
        gonderilecekKargolariGuncelle()

    End Sub

    Sub indirilecekKargolariGuncelle()
        Dim indirilecekUrunleriGetirSQL = "select merkezlersubeler.Adi as gonderensubeadi, kargolar.*, kaynaksubeID, hedefsubeID, sira, islemID from kargorotaislemleri " &
            " left join kargolar on (kargorotaislemleri.kargoID = kargolar.kargoID)" &
            " left join merkezlersubeler on (kargolar.gonderenSube = merkezlersubeler.ID)" &
            " where islem = 'Araca Yüklendi' and hedefsubeID = " & merkezID &
            " order by merkezlersubeler.ID asc "
        dgvIndirilecekKargolar.DataSource = Sorgula(indirilecekUrunleriGetirSQL)

    End Sub

    Sub gonderilecekKargolariGuncelle()
        Dim gonderilecekKargolariGetirSQL = "select merkezlersubeler.Adi as sonrakiSubeAdi , kargolar.*,kargorotalar.subeID as sonrakiSubeID , islemID" &
            " from kargorotaislemleri" &
            " left join kargolar on (kargorotaislemleri.kargoID = kargolar.kargoID)" &
            " left join kargorotalar on (kargolar.kargoID = kargorotalar.kargoID and kargolar.rotasira + 1 = kargorotalar.sira) " &
            " left join merkezlersubeler on (kargorotalar.subeID = merkezlersubeler.ID)" &
            " where islem = 'Araçtan İndirildi' and hedefsubeID = " & merkezID &
            " order by merkezlersubeler.ID asc "
        dgvGonderilecekKargolar.DataSource = Sorgula(gonderilecekKargolariGetirSQL)

        ' 0 bugunu düzeltmek için... Bölgeler arası transferlerde 0 id li merkeze göndermeye çalışıyor, halbuki doğrudan ilgili merkeze göndermeli. tree yapısındaki tek merkeziyetçi, tek nodelu  yapısal sorunsalın subliminal mesajları hep bunlar :( .
        For Each satir As DataGridViewRow In dgvGonderilecekKargolar.Rows
            Dim sonrakiSube = satir.Cells("sonrakiSubeID").GetEditedFormattedValue(satir.Index, DataGridViewDataErrorContexts.Display)
            Dim kargoID = satir.Cells("kargoID").GetEditedFormattedValue(satir.Index, DataGridViewDataErrorContexts.Display)
            If sonrakiSube = 0 Then
                Dim yeniSonrakiMerkezGetirSQL = "select kargorotalar.subeID as sonrakiSubeID, merkezlersubeler.Adi as sonrakiSubeAdi from kargolar " &
                    "left join kargorotalar on (kargolar.kargoID = kargorotalar.kargoID and kargolar.rotasira + 2 = kargorotalar.sira)" &
                    "left join merkezlersubeler on (kargorotalar.subeID = merkezlersubeler.ID)" &
                    "where kargolar.kargoID = " & kargoID
                Dim yeniSonrakiMerkezGetir = Sorgula(yeniSonrakiMerkezGetirSQL)
                Dim yeniSonrakiMerkez = yeniSonrakiMerkezGetir.Rows(0)
                satir.Cells("sonrakiSubeID").Value = yeniSonrakiMerkez("sonrakisubeID")
                satir.Cells("sonrakiSubeAdi").Value = yeniSonrakiMerkez("sonrakiSubeAdi")
            End If
        Next

    End Sub

    Public Sub MerkezBelirle(ByVal _merkezID As Integer, ByVal merkezadi As String, ByVal _kapatilincaLogin As Boolean)
        merkezID = _merkezID
        lbMerkezAdi.Text = merkezadi
        lbMerkezAdi2.Text = merkezadi
        Me.Text = merkezadi
        kapatilincaLogin = _kapatilincaLogin
    End Sub

    Private Sub btnAractanIndir_Click(sender As Object, e As EventArgs) Handles btnAractanIndir.Click
        Dim seciliSatirIdx = dgvIndirilecekKargolar.SelectedCells(0).RowIndex
        Dim islemID = dgvIndirilecekKargolar.Rows(seciliSatirIdx).Cells("islemID").GetEditedFormattedValue(seciliSatirIdx, DataGridViewDataErrorContexts.Display)
        Dim kargoID = dgvIndirilecekKargolar.Rows(seciliSatirIdx).Cells("kargoID").GetEditedFormattedValue(seciliSatirIdx, DataGridViewDataErrorContexts.Display)
        Dim kaynaksubeID = dgvIndirilecekKargolar.Rows(seciliSatirIdx).Cells("kaynaksubeID").GetEditedFormattedValue(seciliSatirIdx, DataGridViewDataErrorContexts.Display)
        Dim hedefsubeID = dgvIndirilecekKargolar.Rows(seciliSatirIdx).Cells("hedefsubeID").GetEditedFormattedValue(seciliSatirIdx, DataGridViewDataErrorContexts.Display)
        Dim sira = dgvIndirilecekKargolar.Rows(seciliSatirIdx).Cells("sira").GetEditedFormattedValue(seciliSatirIdx, DataGridViewDataErrorContexts.Display)


        
        ' indrilen kargolar tekrar çıkmasın diye işlemi değiştiriyoruz :/. yapısal değil ama 100% çalışıyor
        Dim indirildiOlarakİsaretle = "update kargorotaislemleri set islem = 'Araca Yüklendi.' where islemID = " & islemID
        Sorgula(indirildiOlarakİsaretle)

        Dim islemOlusturSQL = "insert into kargorotaislemleri (kargoID, kaynaksubeID, hedefsubeID, islem, sira,tarih) values (" & kargoID & "," & kaynaksubeID & "," & hedefsubeID & ",'Araçtan İndirildi', " & sira & ", '" & DateTime.Now & "')"
        Sorgula(islemOlusturSQL)

        indirilecekKargolariGuncelle()

    End Sub

    Private Sub btnKargoGonder_Click(sender As Object, e As EventArgs) Handles btnKargoGonder.Click
        If dgvGonderilecekKargolar.SelectedCells.Count = 0 Then
            MsgBox("Gönderilecek bir kargo seçmelisiniz", MsgBoxStyle.Exclamation)
            Return
        End If

        Dim secilenSatirIdx = dgvGonderilecekKargolar.SelectedCells(0).RowIndex
        Dim kargoID = dgvGonderilecekKargolar.Rows(secilenSatirIdx).Cells("kargoID").GetEditedFormattedValue(secilenSatirIdx, DataGridViewDataErrorContexts.Display)
        '  Dim gonderenSubeID = dgvMusteridenGelenKargolar.Rows(secilenSatirIdx).Cells("gonderenSube").GetEditedFormattedValue(secilenSatirIdx, DataGridViewDataErrorContexts.Display)

        ' 0 bugunu düzeltmek için. Normalde rotaları tek tek gidiyoduk ama 0 olursa 2 gitmemiz lazım
        Dim atlatilacakAdimSayisi = 1
        Dim bolgeMerkezMiKontrolSQL = "select kargolar.kargoID, rotasira, kargorotalar.* from kargolar " &
            " left join kargorotalar on (kargolar.kargoID = kargorotalar.kargoID and kargolar.rotasira + 1 = kargorotalar.sira)" &
            " where kargolar.kargoID = " & kargoID
        Dim bolgeMerkezMiKontrolGetir = Sorgula(bolgeMerkezMiKontrolSQL)
        Dim bolgeMerkezMiKontrol = bolgeMerkezMiKontrolGetir.Rows(0)
        If (bolgeMerkezMiKontrol("subeID") = 0) Then
            '  MsgBox("Bolgeler arası transfer. atlatılacak adım sayısı 2 olmalı")
            atlatilacakAdimSayisi = 2
        Else
            ' MsgBox("Merkezler arası normal transfer. atlatılacak adım sayısı 1 olmalı")
            atlatilacakAdimSayisi = 1
        End If

        ' 0 bugu düzeltildi. devam ediliyor..
        ' Return
        Dim sonrakiSubeID = dgvGonderilecekKargolar.Rows(secilenSatirIdx).Cells("sonrakiSubeID").GetEditedFormattedValue(secilenSatirIdx, DataGridViewDataErrorContexts.Display)
        Dim sonrakiSubeAdi = dgvGonderilecekKargolar.Rows(secilenSatirIdx).Cells("sonrakiSubeAdi").GetEditedFormattedValue(secilenSatirIdx, DataGridViewDataErrorContexts.Display)
        Dim rotasira = dgvGonderilecekKargolar.Rows(secilenSatirIdx).Cells("rotasira").GetEditedFormattedValue(secilenSatirIdx, DataGridViewDataErrorContexts.Display)
        Dim gonderenSube = dgvGonderilecekKargolar.Rows(secilenSatirIdx).Cells("gonderenSube").GetEditedFormattedValue(secilenSatirIdx, DataGridViewDataErrorContexts.Display)
        Dim islemID = dgvGonderilecekKargolar.Rows(secilenSatirIdx).Cells("islemID").GetEditedFormattedValue(secilenSatirIdx, DataGridViewDataErrorContexts.Display)

        ' indrilen kargolar tekrar çıkmasın diye işlemi değiştiriyoruz :/. yapısal değil ama 100% çalışıyor
        Dim gonderildiOlarakİsaretle = "update kargorotaislemleri set islem = 'Araçtan İndirildi.' where islemID = " & islemID
        Sorgula(gonderildiOlarakİsaretle)

        ' işlemler tablosuna gönderildi işlemini işliyoruz.
        Dim sqlIslemEkle = "insert into kargorotaislemleri (kargoID, kaynaksubeID, hedefsubeID, islem, sira, tarih) values " &
            "(" & kargoID & "," & merkezID & "," & sonrakiSubeID & ",'Araca Yüklendi'," & rotasira + 1 & ", '" & DateTime.Now & "')"
        Sorgula(sqlIslemEkle)

        ' kargonun sırasını / hangi merkezde olduğunu ana tabloda güncelliyoruz
        Dim sqlKargoGuncelle = "update kargolar set rotasira = rotasira + " & atlatilacakAdimSayisi & " where kargoID = " & kargoID
        Sorgula(sqlKargoGuncelle)

        gonderilecekKargolariGuncelle()
    End Sub

    Private Sub TabPage2_Enter(sender As Object, e As EventArgs) Handles TabPage2.Enter
        gonderilecekKargolariGuncelle()
    End Sub

    Private Sub TabControl1_Enter(sender As Object, e As EventArgs) Handles TabControl1.Enter
        indirilecekKargolariGuncelle()
    End Sub

    Private Sub MerkezEkran_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
        If kapatilincaLogin Then
            Login.Show()
        End If
        
    End Sub
End Class